' This program exported from BASIC Anywhere Machine (Version [5.2.3].[2024.07.14.16.44]) on 2024.07.14 at 19:51 (Coordinated Universal Time)
' Program by Charlie Veniot
' 
' The challenge from bplus:
' What numbers between 1 and 1000 can NOT be expressed as the sum of consecutive integers?
' ie 15 = 7 + 8
' 18 = 5 + 6 + 7
'
' so neither one of these are in the set of numbers that can NOT be expressed as a sum of consecutive integers.
'
' BONUS: one number can be expressed 15 different ways as a sum of consecutive numbers what is it and list the ways.

FUNCTION HaveHit%( n%, i%, imax%, BYREF v$ )
  DIM sum% = 0
  HaveHit% = FALSE
  IF i% <> imax% THEN
  FOR l% = i% TO imax%
    sum% = sum% + l%
    v$ = v$ + l% + "+"
    IF sum% > n% OR sum% = n% THEN l% = imax%
    IF sum% = n% THEN HaveHit% = TRUE
  NEXT 
  END IF
  v$ = "(" + LEFT$( v$, LEN( v$ )-1 ) + ")"
END FUNCTION

SCREEN _NEWIMAGE(1024,216,0)
DIM result$ = ""
FOR n% = 1 to 1000
  imax% = FIX( (n% + 1) / 2 )
  c% = 0
  FOR i% = 1 TO imax%
      v$ = ""
      IF HaveHit%( (n%), (i%), (imax%) , v$) THEN
         c% = c% + 1
      END IF
  NEXT i%
  IF c% = 0 THEN PRINT n% + " cannot be expressed as the sum of consecutive integers"
  IF c% = 15 THEN
     PRINT n% + " can be expressed 15 different ways as a sum of consecutive numbers"
     FOR i% = 1 TO imax%
         v$ = ""
         IF HaveHit%( (n%), (i%), (imax%) , v$) THEN
            PRINT "  " + v$
         END IF
     NEXT i%
  END IF
NEXT n%